package Risk.Moteur;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 *  Continent
 *     @version    1.0, 07/12/26
 *   @author     Alexandre LIGUORI
 */
public class Continent implements Serializable {

    // Sebastien : Ajout d'un champ pour securiser la serialisation
    private static final long	serialVersionUID = 15L;
    private String		nom;
    private ArrayList<Pays>	paysContinent;
    private Plateau		plateau;
    private int			renfort;

    /**
     * Constructeur de continent
     * @param nom nom du continent
     * @param renfort valeur de renfort qu apporte la possesion du continent
     * @param plateau plateau
     */
    public Continent(String nom, int renfort, Plateau plateau) {
	this.nom           = nom;
	this.paysContinent = new ArrayList<Pays>();
	this.renfort       = renfort;
	this.plateau       = plateau;
    }

    /**
     * ajoute un pays au continent
     * @param val pays
     * @return true si reussi, false sinon
     */
    public boolean ajoutePays(Pays val) {
	return this.paysContinent.add(val);
    }

    /**
     * initialise les pays via un fichier
     * @param fic le chemin du fichier
     */
    public void initialisationPays(String fic) {
	String		pays       = "";
	String		st_renfort = "";
	Pays		pays_TMP;
	FileReader	fl    = null;
	BufferedReader	bf    = null;
	String		ligne = null;
	StringTokenizer	stok;

	try {
	    File	file = new File(fic);

	    fl    = new FileReader(file);
	    bf    = new BufferedReader(fl);
	    ligne = bf.readLine();

	    while (ligne != null) {
		stok = new StringTokenizer(ligne, " ");

		if (stok.nextToken().equals(this.getNom())) {
		    pays       = stok.nextToken();
		    st_renfort = stok.nextToken();
		    pays_TMP   = new Pays(pays, st_renfort, plateau);
		    ajoutePays(pays_TMP);
		}

		ligne = bf.readLine();
	    }
	} catch (IOException ex) {
	    ex.printStackTrace();
	} finally {
	    try {
		bf.close();
		fl.close();
	    } catch (IOException ex) {
		ex.printStackTrace();
	    }
	}
    }

    /**
     * to string
     * @return string
     */
    @Override
    public String toString() {
	return nom + " : " + renfort;
    }

    /**
     * renvoie nom du continent
     * @return nom du continent
     */
    public String getNom() {
	return nom;
    }

    /**
     * renvoie la liste des pays du continent
     * @return liste des pays du continent
     */
    public ArrayList<Pays> getPaysContinent() {
	return paysContinent;
    }

    /**
     * renvoie la valeur de renfort si un joueur possede le continent
     * @return le nombre de renfort
     */
    public int getRenfort() {
	return renfort;
    }
}
